我們前幾天介紹了一些不同的 OSI Layer 2 協定
今天我們將介紹另一個重要的 L2 連結層協定
STP,全名為 Spanning Tree Portocol,中文叫生成樹協定
在介紹 L2 協定時我們也說過
用途為偵測網路實體連接拓樸
主要用來避免網路拓樸產生環狀結構(Loop)
網路中產生環狀結構時容易造成廣播風暴(Broadcast radiation、Broadcast Storm)
這個協定可以探測出網路的實體接線,並找出一個不會產生環狀結構的邏輯網路拓樸
在介紹一下 STP 的運作原理前,我們先來介紹一下什麼是廣播風暴
因為現在大多數 Switch 預設都有啟用 STP,所以常常不會發現這個問題
在這個網路拓樸下,如果沒有開啟 STP 會發生什麼事呢
首先,當 PC A 發出了一個 L2 的廣播封包(像是之前介紹的 ARP 請求封包,就是廣播形式的)
PC A 將會發送至 Switch 2(他也只有連上 Switch 2,也沒辦法傳給其他人)
Switch 2 看到了這個封包,想說是廣播封包
所以複製了一份,傳給 Switch 1 與 Switch 3,這時候整個網路拓樸中就已經有兩份這個封包了,讓我們根據複製出來的封包做編號並分別講解
發現了嗎,這時候複製出來的這兩個封包就會留存在網路拓樸中
且因為 Layer 2 沒有 TTL(Time to Live)機制,沒辦法轉送超過一定數量設備後被丟棄
所以網路內的封包就會越來越多,且電腦也會一直收到複製出來的廣播封包
這時候就會造成 Switch 與終端設備要花資源來處理這些垃圾封包
而最終將會造成資源耗盡
STP 其實是算是一個有點小複雜的演算法,我們在這裡不會過多介紹計算方式
但我們要知道的是,STP 會透過一定算法,來將邏輯拓樸變換成一個樹的結構
在剛剛上面的例子,我們假設 Switch 2 為樹的 Root,則邏輯拓樸將會變為如下
Switch 1 與 Switch 3 之間將不會有連線,進而避免了廣播封包繼續傳遞下去
而這個樹中的 Root 可以是用某些條件自動產生的,又或者是人工指定的
BPDU,全名 Bridge Protocol Data Unit,是 STP 這個協定用來傳輸相關資料的資料包名稱,以下將會使用 BPDU 這個名字來講解 STP 的資料包
我們說到的這個 Tree 的 Root 是某些條件自動產生的,但也可以人工指定
假設我們今天有以下的一個實體拓樸
攻擊者就可以透過發送假的 STP 封包,跟 Switch 2 與 Switch 3 講說自己是管理者指定的 Root
這時候邏輯拓樸就會變得如下
發現了嗎,這雖然是一顆完整的樹,但最上層節點(Root)變為了攻擊者
這也間接導致了 PC A 與 PC B 之間的溝通,勢必要經由攻擊者才能到達,攻擊者就可以藉此監聽或竄改 PC A 與 PC B 之間的溝通
當生成樹結構改變時,正常情況下需要通知全體 Switch,讓他們更改 Forwarding Table,這樣才能將封包傳送到正確的地方
而攻擊者可以模擬假的 TCN 封包,讓交換器頻繁的情除 Forwarding Table,造成需要重新學習設備 MAC,導致轉發功能無法工作,造成連線障礙
就像上面所說的,如果當生成樹結構改變時,正常情況下需要通知全體 Switch,但如果沒有通知的話,就會造成交換器的 Forwarding Table 在一段時間內無法正確轉送封包,頻繁的生成樹結構改變加上沒有正確通知交換器,就會導致轉發功能無法工作,造成連線障礙
當發送大量偽造 BPDU 時,交換器以為實體結構改變了,需要計算新的生成樹,這時候就會造成資源耗損,但需要發送大量偽造 BPDU,且並沒有較直接的攻擊效果,只能造成資源耗用
首先,我們有一種顯而易見的方法,就是禁止交換器上的終端設備連接孔的 BPDU
就上面 STP Hijack 的實體連結拓樸來看
如果我們只信任綠色三條線路兩端的連接孔來接收 BPDU 相關封包
我們就可以避免攻擊者同時接上兩台 Switch 來達成流量劫持的效果
也可以避免 PC A 與 PC B 發送其他 BPDU 攻擊
但這樣有一個缺點
當如果有一個使用者私自接上了 Switch
如上圖 Switch 4,這時候 STP 就無法正確處理網路拓樸,導致 Loop 的產生
所以同時也要搭配公司政策或者其他設定(Storm Control)等做使用
本篇稍稍講解了 STP 這個連接層協定可能造成的一些問題
這裡有另一篇十分具有參考價值的文章,但內容稍微複雜且偏向實作
如我的文章中有講解不到位的地方,這篇文章基本涵蓋了大部分內容
Spanning Tree Protocol Attack 生成樹協定攻擊 - Jan Ho 的網絡世界
但實作較偏向 Cisco 的做法,其他廠牌略有不同,故在此不多作介紹
最近在重唸STP,真的有點小複雜,我發現現在很多SW預設是把STP關掉的,不知為什麼.
你應該是指家用的吧._.
商用的應該預設都是開的